#ifndef SERVICE_H
#define SERVICE_H
#include <QString>
#include <QStack>
#include <util.h>
#include <operatortable.h>
#include <complex.h>
#include <QDebug>
#include <matrix.h>
class Service
{
public:
    Service();
    /* 计算算术表达式 */
    //计算精度
    int precision = 6;
    //初始化
    void init();
    //当用户输入非法的运算表达式，调用该函数做后续处理
    void processingError();
    //计算 每次输入运算符或操作数
    void calculate();
    //设置输出精度
    void setting();
    //计算整个表达式 成功返回1 失败返回0
    bool expressionCalculate(QString str, double& res);

    /* 复数运算 */
    Complex add(Complex c1, Complex c2);
    Complex subtract(Complex c1, Complex c2);
    Complex multiply(Complex c1, Complex c2);
    Complex divide(Complex c1, Complex c2);

    /* 矩阵运算 */
    Matrix add(Matrix m1, Matrix m2);
    Matrix sub(Matrix m1, Matrix m2);
    Matrix mul(Matrix m1, Matrix m2);

    /* 求子集 */
    void dfs(int index, QList<QString> nums, QList<QString> list);
    QList<QString> resultList;
    QStringList subset(QList<QString> nums);
private:
    QStack<double> numStack;
    QStack<double> operatorStack;
};

#endif // SERVICE_H
